<?php
if (!defined('TI_SL_STORE_URL')) {
    define( 'TI_SL_STORE_URL', 'http://themeisle.com' );
}

function Parallax_One_theme_updater() {


    $theme_data =   wp_get_theme(basename(get_template_directory() ));
    $edd_updater = new Parallax_One_Theme_Updater( array(
            'remote_api_url' 	=> TI_SL_STORE_URL, 	// Our store URL that is running EDD
            'version' 			=> $theme_data->get('Version'), 				// The current theme version we are running
            'license' 			=> "free", 		// The license key (used get_option above to retrieve from DB)
            'item_name' 		=> $theme_data->get('Name'),	// The name of this theme
            'author'			=> 'ThemeIsle'	// The author's name
        )
    );
}
add_action( 'admin_init', 'Parallax_One_theme_updater' );

if(!class_exists('Parallax_One_Theme_Updater')) {
    class Parallax_One_Theme_Updater {
        private $remote_api_url;
        private $request_data;
        private $response_key;
        private $theme_slug;
        private $license_key;
        private $version;
        private $author;

        function __construct( $args = array() ) {
            $args = wp_parse_args( $args, array(
                'remote_api_url' => 'http://easydigitaldownloads.com',
                'request_data'   => array(),
                'theme_slug'     => get_template(),
                'item_name'      => '',
                'license'        => '',
                'version'        => '',
                'author'         => ''
            ) );
            extract( $args );

            $theme                = wp_get_theme( sanitize_key( $theme_slug ) );
            $this->license        = $license;
            $this->item_name      = $item_name;
            $this->version        = ! empty( $version ) ? $version : $theme->get( 'Version' );
            $this->theme_slug     = sanitize_key( $theme_slug );
            $this->author         = $author;
            $this->remote_api_url = $remote_api_url;
            $this->response_key   = $this->theme_slug . '-update-response';


            add_filter( 'site_transient_update_themes', array( &$this, 'theme_update_transient' ) );
            add_filter( 'delete_site_transient_update_themes', array( &$this, 'delete_theme_update_transient' ) );
            add_action( 'load-update-core.php', array( &$this, 'delete_theme_update_transient' ) );
            add_action( 'load-themes.php', array( &$this, 'delete_theme_update_transient' ) );
            add_action( 'load-themes.php', array( &$this, 'load_themes_screen' ) );
        }

        function load_themes_screen() {
            add_thickbox();
            add_action( 'admin_notices', array( &$this, 'update_nag' ) );
        }

        function update_nag() {
            $theme = wp_get_theme( $this->theme_slug );

            $api_response = get_transient( $this->response_key );

            if( false === $api_response )
                return;

            $update_url = wp_nonce_url( 'update.php?action=upgrade-theme&amp;theme=' . urlencode( $this->theme_slug ), 'upgrade-theme_' . $this->theme_slug );
            $update_onclick = ' onclick="if ( confirm(\'' . esc_js( __( "Updating this theme will lose any customizations you have made. 'Cancel' to stop, 'OK' to update." ) ) . '\') ) {return true;}return false;"';

            if ( version_compare( $this->version, $api_response->new_version, '<' ) ) {

                echo '<div id="update-nag">';
                printf( '<strong>%1$s %2$s</strong> is available. <a href="%3$s" class="thickbox" title="%4s">Check out what\'s new</a> or <a href="%5$s"%6$s>update now</a>.',
                    $theme->get( 'Name' ),
                    $api_response->new_version,
                    '#TB_inline?width=640&amp;inlineId=' . $this->theme_slug . '_changelog',
                    $theme->get( 'Name' ),
                    $update_url,
                    $update_onclick
                );
                echo '</div>';
                echo '<div id="' . $this->theme_slug . '_' . 'changelog" style="display:none;">';
                echo wpautop( $api_response->sections['changelog'] );
                echo '</div>';
            }
        }

        function theme_update_transient( $value ) {
            $update_data = $this->check_for_update();
            if ( $update_data ) {
                $value->response[ $this->theme_slug ] = $update_data;
            }
            return $value;
        }

        function delete_theme_update_transient() {
            delete_transient( $this->response_key );
        }

        function check_for_update() {

            $theme = wp_get_theme( $this->theme_slug );

            $update_data = get_transient( $this->response_key );
            if ( false === $update_data ) {
                $failed = false;

                if( empty( $this->license ) )
                    return false;

                $api_params = array(
                    'edd_action' 	=> 'get_version',
                    'version'       => $this->version,
                    'license' 		=> $this->license,
                    'name' 			=> $this->item_name,
                    'slug' 			=> $this->theme_slug,
                    'author'		=> $this->author,
                    'url'           => home_url()
                );

                $response = wp_remote_post( $this->remote_api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );

                // make sure the response was successful
                if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
                    $failed = true;
                }

                $update_data = json_decode( wp_remote_retrieve_body( $response ) );

                if ( ! is_object( $update_data ) ) {
                    $failed = true;
                }

                // if the response failed, try again in 30 minutes
                if ( $failed ) {
                    $data = new stdClass;
                    $data->new_version = $this->version;
                    set_transient( $this->response_key, $data, strtotime( '+30 minutes' ) );
                    return false;
                }

                // if the status is 'ok', return the update arguments
                if ( ! $failed ) {
                    $update_data->sections = maybe_unserialize( $update_data->sections );
                    set_transient( $this->response_key, $update_data, strtotime( '+12 hours' ) );
                }
            }

            if ( version_compare( $this->version, $update_data->new_version, '>=' ) ) {
                return false;
            }

            return (array) $update_data;
        }
    }
}
